package org.ki.gra.duszki;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Animation;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;

/**
 * User: kieronsk
 * Date: 10/9/12
 * Time: 11:48 AM
 */
public class AnimowanySprite extends Sprite{
    private final Animation animacja;
    private float czas = 0f;
    private final TextureRegion[] klatki;
    private final float proporcje;

    public float getProporcje() {
        return proporcje;
    }

    /**
     * Sprite z wbudowaną animacją
     *
     * @param fileName  nazwa pliku z teksturą
     * @param kolumny   ilość klatek w poziomie
     * @param wiersze   ilość klatek w pionie
     * @param czas      jak długo ma trwać cykl animacji w sekundach
     */
    public AnimowanySprite(String fileName, int kolumny, int wiersze, float czas) {

        Texture tekstura = new Texture(Gdx.files.internal(fileName));
        int szer = tekstura.getWidth() / kolumny;
        int wys = tekstura.getHeight() / wiersze;

        proporcje = szer / (float)wys;

        TextureRegion[][] tmp = TextureRegion.split(tekstura, szer, wys);

        klatki = new TextureRegion[kolumny*wiersze];

        int index = 0;
        for (int i=0; i<wiersze; i++)
            for (int j=0; j<kolumny; j++)
                klatki[index++] = tmp[i][j];

        animacja = new Animation(czas/(float)(kolumny*wiersze), klatki);
    }


    /**
     * Uaktualnia wewnętrzny licznik czasu animacji
     *
     * @param delta ilość czasu która upłynęła od poprzedniej klatki
     */
    public void uaktualnijCzas(float delta)
    {
        czas += delta;
    }

    /**
     * Reset animacji
     */
    public void restart()
    {
        czas = 0f;
    }


    @Override
    public void draw(SpriteBatch spriteBatch, float alpha) {
        this.setRegion(animacja.getKeyFrame(czas, true));
        super.draw(spriteBatch, alpha);
    }



    @Override
    public void flip(boolean x, boolean y) {
        for (TextureRegion klatka : klatki)
        {
            klatka.flip(x,y);
        }
    }
}
